﻿using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using memo;

namespace memoTest
{
    /// <summary>
    /// A DataAccessorFactory osztály metósának tesztelése.
    /// Egy metódusa van, a Get(), és egy környezeti változó.
    /// A Get() metódust a változó különböző beállításaival együtt teszteljük.
    /// </summary>
    [TestClass]
    public class DataAccessorFactoryTest
    {
        /// <summary>
        /// Metódus teszt alapértelmezett környezeti változóval.
        /// </summary>
        [TestMethod]
        public void FactoryTest_NoSetting()
        {
            Type expected = typeof(DataAccessor);
            IDataAccessor testDataAccessor = DataAccessorFactory.Get();
            Assert.AreSame(expected, testDataAccessor.GetType());
        }


        /// <summary>
        /// Metódus teszt a környn. változó tesztmódra állításával
        /// </summary>
        [TestMethod]
        public void FactoryTest_TestModeOn()
        {
            Environment.SetEnvironmentVariable("DataAccessorTestMode", "True");
            IDataAccessor testDataAccessor = DataAccessorFactory.Get(); //TODO: lehetne null elméletileg, azt is meg kell nézni
            Type expected = typeof(MockDataAccessor);
            Assert.AreSame(expected, testDataAccessor.GetType());
        }


        /// <summary>
        /// Metódus teszt a környn. változó nem tesztmódra állításával
        /// </summary>
        [TestMethod]
        public void FactoryTest_TestModeOff()
        {
            Type expected = typeof(DataAccessor);
            Environment.SetEnvironmentVariable("DataAccessorTestMode", "False");
            IDataAccessor testDataAccessor = DataAccessorFactory.Get();
            Assert.AreSame(expected, testDataAccessor.GetType());
        }


        /// <summary>
        /// Metódus teszt, ahol a körny. változó random szöveget kap 2. paraméterként
        /// </summary>
        [TestMethod]
        public void FactoryTest_InvalidSetting()
        {
            Type expected = typeof(DataAccessor);
            Environment.SetEnvironmentVariable("DataAccessorTestMode", "mustáros virsli");
            IDataAccessor testDataAccessor = DataAccessorFactory.Get();
            Assert.AreSame(expected, testDataAccessor.GetType());
        }

        //felesleges
        // Metódus teszt, ahol a körny. változó random szöveget kap 1. paraméterként
        /*[TestMethod]
        public void GetTestWithEnvironmentVariable4()
        {
            Type expected = typeof(MockDataAccessor);
            Environment.SetEnvironmentVariable("kapros-csípős kebab", "TestMode_on");
            IDataAccessor testDataAccessor = DataAccessorFactory.Get();
            Assert.AreSame(expected, testDataAccessor.GetType());
        }


        // Metódus teszt, ahol a körny. változó random szöveget kap 2. paraméterként
        [TestMethod]
        public void GetTestWithEnvironmentVariable5()
        {
            Type expected = typeof(MockDataAccessor);
            Environment.SetEnvironmentVariable("kapros-csípős kebab", "mustáros virsli");
            IDataAccessor testDataAccessor = DataAccessorFactory.Get();
            Assert.AreSame(expected, testDataAccessor.GetType());
        }
         */
    }
}
